package com.example.gymlearning.service;

import com.example.gymlearning.dto.QuizQuestionDTO;
import com.example.gymlearning.entity.QuizQuestion;

import java.util.List;

/**
 * (QuizQuestion)表服务接口
 *
 * @author makejava
 * @since 2025-11-03 13:44:18
 */
public interface QuizQuestionService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    QuizQuestion queryById(Long id);

    /**
  
    /**
     * 新增数据
     *
     * @param quizQuestion 实例对象
     * @return 实例对象
     */
    QuizQuestion insert(QuizQuestion quizQuestion);

    /**
     * 修改数据
     *
     * @param quizQuestion 实例对象
     * @return 实例对象
     */
    QuizQuestion update(QuizQuestion quizQuestion);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Long id);

    List<QuizQuestion> getQuestionsByKnowledgePointId(Long id);

    // QuizQuestionService.java
// 在接口中添加以下方法：

    // 获取练习题目数量
    int getPracticeQuestionCount(Long pointId);

    // 获取正式题目数量
    int getFormalQuestionCount(Long pointId);

    // 创建练习会话
    Long createPracticeSession(Long pointId);

    // 创建正式会话
    Long createFormalSession(Long pointId);

    // 获取练习题目
    List<QuizQuestion> getPracticeQuestions(Long pointId);

    // 获取正式题目
    List<QuizQuestion> getFormalQuestions(Long pointId);

    // 完成会话
    void completeSession(Long sessionId);

    // 完成正式闯关会话
    boolean completeFormalSession(Long sessionId, Integer score, Integer correctAnswers, Integer totalQuestions);



    /**
     * 根据知识点ID随机获取指定数量的题目
     */
    List<QuizQuestion> getRandomQuestionsByPointId(Long pointId, int count);
    
    /**
     * 获取随机化后的题目列表（支持选项随机、题目变体随机）
     * 
     * @param pointId 知识点ID
     * @param usageType 使用类型：LEARNING-学习, REVIEW-复习, QUIZ-测验
     * @return 随机化后的题目列表
     */
    List<QuizQuestionDTO> getRandomizedQuestions(Long pointId, String usageType);
}
